'''
Created on 12/10/2011

@author: silviojr
'''
from Classificacao import Classificacao

class Termo(object):
    '''
    classdocs
    '''


    def __init__(self, nome, pos , polaridade, nivel, relacao, seed, precedente):
        '''
        Constructor
        '''
        self.pos = pos
        self.classificacoesPositivas = []
        self.classificacoesNegativas = []
        self.classificacoesNeutras = []
        
        if polaridade == 'positiva':
            self.classificacoesPositivas.append(Classificacao(polaridade,
                                                              nivel,
                                                              relacao,
                                                              seed,
                                                              precedente))
        if polaridade == 'negativa':
            self.classificacoesNegativas.append(Classificacao(polaridade,
                                                              nivel,
                                                              relacao,
                                                              seed,
                                                              precedente))
        if polaridade == 'neutra':
            self.classificacoesNeutras.append(Classificacao(polaridade,
                                                            nivel, 
                                                            relacao,
                                                            seed,
                                                            precedente))
        self.nome = nome
        self.relacao = 'duvida'
        
  
    
    def getRelacao(self):
        return self.relacao
    
    def getNivel(self):
        return self.nivel
    
    def getClassificacoesPositivas(self):
        return self.classificacoesPositivas;
    
    def getPolaridadePorVotos(self):
        votosNegativos = len(self.classificacoesNegativas)
        votosPositivos = len(self.classificacoesPositivas)
        votosNeutros = len(self.classificacoesNeutras)
        
        if(votosNegativos > votosPositivos and votosNegativos > votosNeutros):
            self.polaridadeVotos = 'negativa'
            return 'negativa'
        if(votosPositivos > votosNegativos and votosPositivos > votosNeutros):
            self.polaridadeVotos = 'positiva'
            return 'positiva'
        self.polaridadeVotos = 'neutra'
        return 'neutra'
    
    def imprimeTermo(self, parametro):
        if(parametro == 'votos'):
            print self.nome, " (",self.getPolaridadePorVotos(),") - Votos positivos(", len(self.classificacoesPositivas), ") Votos negativos(",len(self.classificacoesNegativas),")"
            for classificacao in self.classificacoesPositivas:
                classificacao.imprimeClassificacao()
            for classificacao in self.classificacoesNegativas:
                classificacao.imprimeClassificacao()
        if(parametro == 'nivel'):
            print self.nome," (", self.getPolaridadePorNivel(),") - Nivel:", self.nivel, " Seed:", self.seed, " Relacao: ", self.relacao, "precedente:", self.precedente
            

    #retorna true caso haja discordancia entre votos
    def getVotosDiscordantes(self):
        if len(self.classificacoesNegativas) > 0 and len(self.classificacoesPositivas) > 0:
            return True 
        return False 
    
    def getNumeroVotos(self):
        votosNegativos = len(self.classificacoesNegativas)
        votosPositivos = len(self.classificacoesPositivas)
        votosNeutros = len(self.classificacoesNeutras)
        
        if(votosNegativos > votosPositivos and votosNegativos > votosNeutros):
            return votosNegativos
        if(votosPositivos > votosNegativos and votosPositivos > votosNeutros):
            return votosPositivos
        return 0
        
    def getSeedNegativo(self, seed):
        for classificacao in self.classificacoesNegativas:
            if classificacao.seed == seed:
                return True
        return False
    def getSeedPositivo(self, seed):
        for classificacao in self.classificacoesPositivas:
            if classificacao.seed == seed:
                return True
        return False
    def getSeedNeutro(self, seed):
        for classificacao in self.classificacoesNeutras:
            if classificacao.seed == seed:
                return True
        return False
        
            

    
    def checa(self, polaridade, nivel, relacao, seed, precedente):
        if polaridade == 'positiva':
            for classificacao in self.classificacoesPositivas:
                if classificacao.seed == seed and classificacao.relacao == relacao and classificacao.nivel > nivel:
                    classificacao.setNivel(nivel)
                    classificacao.setPrecedente(precedente)
                    return
            self.classificacoesPositivas.append(Classificacao(polaridade, nivel, relacao, seed, precedente))
            
        if polaridade == 'negativa':
            for classificacao in self.classificacoesNegativas:
                if classificacao.seed == seed and classificacao.relacao == relacao and classificacao.nivel > nivel:
                    classificacao.setNivel(nivel)
                    classificacao.setPrecedente(precedente)
                    return
            self.classificacoesNegativas.append(Classificacao(polaridade, nivel, relacao, seed, precedente))
            
        if polaridade == 'neutra':
            for classificacao in self.classificacoesNeutras:
                if classificacao.seed == seed and classificacao.relacao == relacao and classificacao.nivel > nivel:
                    classificacao.setNivel(nivel)
                    classificacao.setPrecedente(precedente)
                    return
            self.classificacoesNeutras.append(Classificacao(polaridade,nivel, relacao, seed, precedente))                                
          
    def getPolaridadePorNivel(self):
        nivelPositivo = 10000
        nivelNegativo = 10000
        nivelNeutro   = 10000
        for classificacao in self.classificacoesPositivas:
            if nivelPositivo > classificacao.nivel:
                nivelPositivo = classificacao.nivel
                seedPositivo = classificacao.seed
                relacaoPositivo = classificacao.relacao
                precedentePositivo = classificacao.precedente
        for classificacao in self.classificacoesNegativas:
            if nivelNegativo > classificacao.nivel:
                nivelNegativo = classificacao.nivel
                seedNegativo = classificacao.seed
                relacaoNegativo = classificacao.relacao
                precedenteNegativo = classificacao.precedente
        for classificacao in self.classificacoesNeutras:
            if nivelNeutro > classificacao.nivel:
                nivelNeutro = classificacao.nivel
                seedNeutro = classificacao.seed
                relacaoNeutro = classificacao.relacao
                precedenteNeutro = classificacao.precedente
                
                
        if(nivelPositivo < nivelNegativo and nivelPositivo < nivelNeutro):
            self.seed = seedPositivo
            self.nivel = nivelPositivo
            self.relacao = relacaoPositivo
            self.polaridadeNivel = 'positiva'
            self.precedente = precedentePositivo
            return 'positiva'
        
        if(nivelNegativo < nivelPositivo and nivelNegativo < nivelNeutro):
            self.seed = seedNegativo
            self.nivel = nivelNegativo
            self.relacao = relacaoNegativo
            self.polaridadeNivel = 'negativa'
            self.precedente = precedenteNegativo
            return 'negativa'
        
        if(nivelNeutro < nivelPositivo and nivelNeutro < nivelNegativo):
            self.seed = seedNeutro
            self.nivel = nivelNeutro
            self.relacao = relacaoNeutro
            self.polaridadeNivel = 'neutra'
            self.precedente = precedenteNeutro
            return 'neutra'
        
        self.seed = 'indeterminada'
        self.nivel= 0
        self.relacao = 'duvida'
        self.precedente = 'duvida'
        return 'neutra'

            
        def getPolaridadePorRelacao(self, relacao):
            nivelPositivo = 1000
            nivelNegativo = 1000
            nivelNeutro = 1000
            for classificacao in self.classificacoesPositivas:
                if nivelPositivo > classificacao.nivel and classificacao.relacao == relacao:
                    nivelPositivo = classificacao.nivel
                    seedPositivo = classificacao.seed
                    relacaoPositivo = classificacao.relacao
            for classificacao in self.classificacoesNegativas:
                if nivelNegativo > classificacao.nivel and classificacao.relacao == relacao:
                    nivelNegativo = classificacao.nivel
                    seedNegativo = classificacao.seed
                    relacaoNegativo = classificacao.relacao
            for classificacao in self.classificacoesNeutras:
                if nivelNeutro > classificacao.nivel and classificacao.relacao == relacao:
                    nivelNeutro = classificacao.nivel
                    seedNeutro = classificacao.seed
                    relacaoNeutro = classificacao.relacao
                    
            if(nivelPositivo < nivelNegativo and nivelPositivo < nivelNeutro):
                self.seed = seedPositivo
                self.nivel = nivelPositivo
                self.relacao = relacaoPositivo
                self.polaridade = 'positiva'
                return 'positiva'
            
            if(nivelNegativo < nivelPositivo and nivelNegativo < nivelNeutro):
                self.seed = seedNegativo
                self.nivel = nivelNegativo
                self.relacao = relacaoNegativo
                self.polaridade = 'negativa'
                return 'negativa'
            
            if(nivelNeutro < nivelPositivo and nivelNeutro < nivelNegativo):
                self.seed = seedNeutro
                self.nivel = nivelNeutro
                self.relacao = relacaoNeutro
                self.polaridade = 'neutra'
                return 'neutra'
            
            self.seed = 'indeterminada'
            self.nivel= 0
            self.relacao = relacao
            return 'intederminada'            
        
        
    
                
    
                
        
                    
                
    
        
            
    
        